﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Crosland.Automotriz.Logic.Linq;
using System.Data;
using Crosland.Automotriz.Entidad;
using System.Configuration;
using System.IO;
using Crosland.Automotriz.Seguridad.Entity;
using Crosland.Automotriz.Seguridad.Business;
using System.Net.Mail;

namespace Crosland.Automotriz.Web.Repuestos
{
    public partial class wFrmDescuentosActualizar : System.Web.UI.Page
    {
        clsTD_MaterialLogic omat = new clsTD_MaterialLogic();
        string idNegocio = ConfigurationManager.AppSettings["Negocio"];
        private static String RutaExcel = "";
        private static List<struct_T_Material_Por_Asignar> listaMaterialNoAsginado = null;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Page.IsPostBack == false)
            {
                listaMaterialNoAsginado = new List<struct_T_Material_Por_Asignar>();
                ListarOrganizacion();
                cboOrganizacion_SelectedIndexChanged(null, null);
                ListarTipoDescuento();
                ListarSector();
                ListarUsuarios();
                
                deFechaInicial.Value = DateTime.Now;
                deFechaFinal.Value = DateTime.Now;
                DataTable dtDetalle = new DataTable();
                dtDetalle.Columns.Add("ID_MATERIAL", typeof(int));
                dtDetalle.Columns.Add("DES_MATERIAL", typeof(string));
                dtDetalle.Columns.Add("IMP_PRECIO_UNITARIO", typeof(decimal));
                dtDetalle.Columns.Add("DES_MODELO", typeof(string));
                dtDetalle.Columns.Add("DES_GRUPO_ARTICULO", typeof(string));
                dtDetalle.Columns.Add("COD_MATERIAL", typeof(string));
                dtDetalle.Columns.Add("DES_SECTOR", typeof(string));
                dtDetalle.Columns.Add("CANT_UNID_OFERT", typeof(decimal));
                dtDetalle.Columns.Add("FEC_FIN", typeof(string));
                dtDetalle.Columns.Add("IMP_PRECIO_UNITARIO_OFERTA", typeof(decimal));
                Session["dtDetalle"] = dtDetalle;

                DataTable dtUsuarios = new DataTable();
                dtUsuarios.Columns.Add("ID_USUARIO", typeof(string));
                dtUsuarios.Columns.Add("DES_EMAIL", typeof(string));
                dtUsuarios.Columns.Add("DES_APELLIDOS", typeof(string));
                dtUsuarios.Columns.Add("LOCK", typeof(string));
                Session["dtUsuarios"] = dtUsuarios;


                //Cargar correo y usuario por defecto 
                clsT_Mae_Tabla_General_DetBL bl = new clsT_Mae_Tabla_General_DetBL();
                List<Crosland.Automotriz.Entidad.T_MAE_TABLA_GENERAL_DET> listaMAE = bl.Listar("T_MAE_OFERTA_USUARIO", 2);
                DataRow drM;
                string ID_USUARIO;
                string nombre;
                clsUsuarioBL negUsu = new clsUsuarioBL();
                
                for (int i = 0; i < listaMAE.Count; i++)
                {
                    ID_USUARIO = listaMAE[0].DES_CORTA;
                    List<T_USUARIO_CORREO> listaCorreo = new List<T_USUARIO_CORREO>();
                    listaCorreo = negUsu.SeleccionarUsuarioCorreo(ID_USUARIO);
                    nombre = listaCorreo[0].DES_APELLIDOS;

                    drM = dtUsuarios.NewRow();
                    drM["ID_USUARIO"] = ID_USUARIO;
                    drM["DES_EMAIL"] = listaMAE[0].DES_LARGA;
                    drM["DES_APELLIDOS"] = nombre;
                    drM["LOCK"] = "1";
                    dtUsuarios.Rows.Add(drM);  
                }

                Session["dtUsuarios"] = dtUsuarios;
                gvUsuarios.DataSource = dtUsuarios;
                gvUsuarios.DataBind();

                if (Request.QueryString["idvoc"] != null) 
                {
                    int ID_VEN_OFERTA_CAB = int.Parse(Request.QueryString["idvoc"].ToString());
                    clsT_VEN_OFERTA_CABBL oVOC = new clsT_VEN_OFERTA_CABBL();
                    T_VEN_OFERTA_CAB eVOC = new T_VEN_OFERTA_CAB();
                    eVOC = oVOC.Seleccionar(ID_VEN_OFERTA_CAB);
                    cboOrganizacion.Value = eVOC.ID_ORG_VTA.ToString();
                    cboOrganizacion_SelectedIndexChanged(null, null);
                    cboOficina.Value = eVOC.ID_OFI_VTA.ToString();
                    deFechaInicial.Value = eVOC.FEC_INICIO;
                    cboCanal.Value = eVOC.ID_CANAL.ToString();
                    cboTipoDescuento.Value = eVOC.ID_TIPO_OFERTA.ToString();
                    deFechaFinal.Value = eVOC.FEC_FIN;
                    btnRegistrar.Text = "Actualizar";

                    //Cargar detalle de ofertas
                    clsT_VEN_OFERTA_DETBL oVOD = new clsT_VEN_OFERTA_DETBL();
                    List<T_VEN_OFERTA_DET_LISTAR> lista = new List<T_VEN_OFERTA_DET_LISTAR>();
                    lista = oVOD.Seleccionar(ID_VEN_OFERTA_CAB);
                    for (int i = 0; i < lista.Count; i++)
                    {
                        DataRow dr;
                        dr = dtDetalle.NewRow();
                        dr["ID_MATERIAL"] = lista[i].ID_MATERIAL;
                        dr["DES_MATERIAL"] = lista[i].DES_MATERIAL.ToUpper();
                        dr["IMP_PRECIO_UNITARIO"] = lista[i].IMP_PRECIO_UNITARIO;
                        dr["DES_MODELO"] = lista[i].DES_MODELO.ToUpper();
                        dr["DES_GRUPO_ARTICULO"] = lista[i].DES_GRUPO_ARTICULO;
                        dr["COD_MATERIAL"] = lista[i].COD_MATERIAL;
                        dr["DES_SECTOR"] = lista[i].DES_SECTOR.ToUpper();
                        dr["CANT_UNID_OFERT"] = lista[i].CANT_UNID_OFERT;
                        dr["FEC_FIN"] = lista[i].FEC_FIN;
                        dr["IMP_PRECIO_UNITARIO_OFERTA"] = lista[i].IMP_PRECIO_UNITARIO_OFERTA;
                        dtDetalle.Rows.Add(dr);
                    }
                    Session["dtDetalle"] = dtDetalle;
                    gvMateriales.DataSource = dtDetalle;
                    gvMateriales.DataBind();

                    //Cargar detalle de Usuarios
                    clsT_VEN_OFERTA_USUARIOBL negOferta = new clsT_VEN_OFERTA_USUARIOBL();
                    List<T_VEN_OFERTA_USUARIO_ENT> listaUsuario = new List<T_VEN_OFERTA_USUARIO_ENT>();
                    listaUsuario = negOferta.Listar(ID_VEN_OFERTA_CAB);
                    dtUsuarios.Rows.Clear();
                    for (int x = 0; x < listaUsuario.Count; x++)
                    {
                        DataRow dr;
                        dr = dtUsuarios.NewRow();
                        dr["ID_USUARIO"] = listaUsuario[x].ID_USUARIO;
                        dr["DES_EMAIL"] = listaUsuario[x].DES_EMAIL.ToUpper();
                        dr["DES_APELLIDOS"] = listaUsuario[x].DES_APELLIDOS.ToUpper();
                        dr["LOCK"] = "0";
                        dtUsuarios.Rows.Add(dr);
                    }
                    Session["dtUsuarios"] = dtUsuarios;
                    gvUsuarios.DataSource = dtUsuarios;
                    gvUsuarios.DataBind();

                    string soloLectura = Request.QueryString["or"];
                    if (soloLectura == "1") 
                    {
                        btnRegistrar.Enabled = false;
                        cboOrganizacion.Enabled = false;
                        cboCanal.Enabled = false;
                        cboOficina.Enabled = false;
                        cboTipoDescuento.Enabled = false;
                        deFechaInicial.Enabled = false;
                        deFechaFinal.Enabled = false;
                        btnNuevo.Enabled = false;
                        btnModificar.Enabled = false;
                        btnEliminar.Enabled = false;
                        btnImportarExcel.Enabled = false;
                        cboUsuario.Enabled = false;
                        btnAgregarUsuario.Enabled = false;
                        gvUsuarios.Enabled = false;
                        btnDescargarExcel.Enabled = false;
                    }
                }
                Panel img = (Panel)Master.FindControl("asp");
                img.Visible = false;
            }
            
        }

        void ListarOrganizacion()
        {
            clsTd_Org_VtaLogic oOrg = new clsTd_Org_VtaLogic();
            cboOrganizacion.DataSource = oOrg.lista();
            cboOrganizacion.TextField = "DES_ORG_VTA";
            cboOrganizacion.ValueField = "ID_ORG_VTA";
            cboOrganizacion.DataBind();
            cboOrganizacion.Value = "2";
        }

        void ListarCanal()
        {
            try
            {
                int ID_ORG_VTA = int.Parse(cboOrganizacion.SelectedItem.Value.ToString());
                clsTd_Canal_DistribLogic oCanal = new clsTd_Canal_DistribLogic();
                cboCanal.DataSource = oCanal.ListarCanalxOrganizacion(ID_ORG_VTA);
                cboCanal.TextField = "DES_CANAL_DISTRIB";
                cboCanal.ValueField = "ID_CANAL_DISTRIB";
                cboCanal.DataBind();
                cboCanal.SelectedIndex = 0;
            }
            catch (Exception)
            {
                
            }
        }

        void ListarOficina()
        {
            try
            {
                int ID_ORG_VTA = int.Parse(cboOrganizacion.SelectedItem.Value.ToString());
                clsTd_Org_Vta_Ofi_Vta_Canal_SectorLogic bl = new clsTd_Org_Vta_Ofi_Vta_Canal_SectorLogic();
                cboOficina.DataSource = bl.listaOficinaVenta(ID_ORG_VTA);
                cboOficina.TextField = "DES_OFI_VTA";
                cboOficina.ValueField = "ID_OFI_VTA";
                cboOficina.DataBind();
                cboOficina.SelectedIndex = 0;
            }
            catch (Exception)
            {
                
            }
        }

        void ListarTipoDescuento()
        {
            clsT_Mae_Tabla_General_DetBL bl = new clsT_Mae_Tabla_General_DetBL();
            cboTipoDescuento.DataSource = bl.Listar("T_VEN_TIPO_DESCUENTO", 2);
            cboTipoDescuento.TextField = "DES_LARGA";
            cboTipoDescuento.ValueField = "ID_GENERAL_DET";
            cboTipoDescuento.DataBind();
            cboTipoDescuento.SelectedIndex = 0;
        }

        void ListarSector()
        {
            try
            {
                IEnumerable<Object> lista = new List<Object>();
                lista = new clsTD_SectorLogic().lista();

                cboSector.DataSource = lista;
                cboSector.TextField = "DES_SECTOR";
                cboSector.ValueField = "ID_SECTOR";
                cboSector.DataBind();
                cboSector.Value = "4";
            }
            catch (Exception)
            {

            }
        }

        void MaterialBuscar()
        {
            try
            {
                int? intIdSector = null, intcantLimite = null;
                String strCodMaterial, strDesMaterial;
                strCodMaterial = txtMCodigo.Text.Trim();
                strDesMaterial = txtMDescrip.Text.Trim();

                intIdSector = (cboSector.Value != null) ? Convert.ToInt32(cboSector.Value) : (cboSector.SelectedItem.Value != null) ? Convert.ToInt32(cboSector.SelectedItem.Value) : intIdSector;
                intcantLimite = (cboMatLimite.Value != null) ? Convert.ToInt32(cboMatLimite.Value) : Convert.ToInt32(cboMatLimite.SelectedItem.Value);


                if (strCodMaterial == String.Empty && strDesMaterial == String.Empty)
                {
                    lblMensaje.Text = "Debe Seleccionar Un Codigo o Una Descripcion.";
                    popupErrores.ShowOnPageLoad = true;
                    return;
                }

                grdMaterial.DataSource = omat.ListarMaterial(strCodMaterial, strDesMaterial, intIdSector, intcantLimite);
                grdMaterial.DataBind();
            }
            catch (Exception)
            {

            }
        }

        void ListarUsuarios() 
        {
            List<T_USUARIO_CORREO> lista = new List<T_USUARIO_CORREO>();
            clsUsuarioBL neg = new clsUsuarioBL();
            lista = neg.ListarUsuarioCorreo();
            cboUsuario.DataSource = lista;
            cboUsuario.TextField = "ID_USUARIO";
            cboUsuario.ValueField = "ID_USUARIO";
            cboUsuario.DataBind();
            cboUsuario.SelectedIndex = 0;
        }

        protected void btnSalir_Click(object sender, EventArgs e)
        {
            string pantalla = Request.QueryString["p"];
            string org = "";
            string can = "";
            string ofi = "";
            string est = "";
            string ofe = "";
            string act = "";

            if (pantalla == "A")
            {
                if (btnRegistrar.Enabled == true)
                {
                    org = Request.QueryString["org"];
                    can = Request.QueryString["can"];
                    ofi = Request.QueryString["ofi"];
                    est = Request.QueryString["est"];
                    ofe = Request.QueryString["ofe"];
                    act = Request.QueryString["act"];
                    Response.Redirect("wFrmDescuentos.aspx?id=" + idNegocio + "&org=" + org + "&can=" + can + "&ofi=" + ofi + "&est=" + est + "&ofe=" + ofe + "&act=" + act);
                }
                else 
                {
                    org = cboOrganizacion.Value.ToString();
                    can = cboCanal.Value.ToString();
                    ofi = cboOficina.Value.ToString();
                    est = Request.QueryString["est"];
                    ofe = cboTipoDescuento.Value.ToString();
                    act = Request.QueryString["act"];//Activo
                    Response.Redirect("wFrmDescuentos.aspx?id=" + idNegocio + "&org=" + org + "&can=" + can + "&ofi=" + ofi + "&est=" + est + "&ofe=" + ofe + "&act=" + act);
                }
            }
            else
            {
                org = Request.QueryString["org"];
                can = Request.QueryString["can"];
                ofi = Request.QueryString["ofi"];
                est = Request.QueryString["est"];
                ofe = Request.QueryString["ofe"];
                act = Request.QueryString["act"];
                Response.Redirect("wFrmDescuentosRespuesta.aspx?id=" + idNegocio + "&org=" + org + "&can=" + can + "&ofi=" + ofi + "&est=" + est + "&ofe=" + ofe + "&act=" + act);
            }
        }

        protected void cboOrganizacion_SelectedIndexChanged(object sender, EventArgs e)
        {
            ListarCanal();
            ListarOficina();
        }

        protected void btnRegistrar_Click(object sender, EventArgs e)
        {
            try
            {
                bool resultado = false;
                clsT_VEN_OFERTA_CABBL oVOC = new clsT_VEN_OFERTA_CABBL();
                T_VEN_OFERTA_CAB eVOC = new T_VEN_OFERTA_CAB();
                //Registrar Cabecera del Oferta
                int ID_VEN_OFERTA_CAB = 0;
                eVOC.ID_ORG_VTA = int.Parse(cboOrganizacion.Value.ToString());
                eVOC.ID_OFI_VTA = int.Parse(cboOficina.Value.ToString());
                eVOC.ID_CANAL = int.Parse(cboCanal.Value.ToString());
                eVOC.ID_TIPO_OFERTA = int.Parse(cboTipoDescuento.Value.ToString());
                eVOC.FEC_INICIO = DateTime.Parse(deFechaInicial.Value.ToString());
                eVOC.FEC_FIN = DateTime.Parse(deFechaFinal.Value.ToString());
                
                if (Request.QueryString["idvoc"] != null)
                {
                    ID_VEN_OFERTA_CAB = int.Parse(Request.QueryString["idvoc"].ToString());
                    eVOC.ID_VEN_OFERTA_CAB = ID_VEN_OFERTA_CAB;
                    resultado = oVOC.Actualizar(eVOC);
                    if (resultado == false) 
                    {
                        lblMensaje.Text = "Ocurrió un error al actualizar los datos.";
                        popupErrores.ShowOnPageLoad = true;
                        return; 
                    }
                }
                else 
                {
                    ID_VEN_OFERTA_CAB = oVOC.ObtenerUltimoID() + 1;
                    eVOC.ID_VEN_OFERTA_CAB = ID_VEN_OFERTA_CAB;
                    eVOC.ID_USUARIO_REGISTRO = Session["User"].ToString();
                    resultado = oVOC.Insertar(eVOC);
                    if (resultado == false)
                    {
                        lblMensaje.Text = "Ocurrió un error al grabar los datos.";
                        popupErrores.ShowOnPageLoad = true;
                        return;
                    }
                }
                
                if (resultado == true) 
                {
                    clsT_VEN_OFERTA_DETBL oVOD = new clsT_VEN_OFERTA_DETBL();
                    T_VEN_OFERTA_DET eVOD = new T_VEN_OFERTA_DET();
                    //Borrar detalle
                    resultado = oVOD.Eliminar(ID_VEN_OFERTA_CAB);
                    if (resultado == true)
                    {
                        //Registrar Detalle de la Oferta
                        DataTable dtDetalle = new DataTable();
                        dtDetalle = (DataTable)Session["dtDetalle"];
                        for (int i = 0; i < dtDetalle.Rows.Count; i++)
                        {
                            int ID_VEN_OFERTA_DET = oVOD.ObtenerUltimoID() + 1;
                            eVOD.ID_VEN_OFERTA_DET = ID_VEN_OFERTA_DET;
                            eVOD.ID_VEN_OFERTA_CAB = ID_VEN_OFERTA_CAB;
                            eVOD.ID_MATERIAL = int.Parse(dtDetalle.Rows[i]["ID_MATERIAL"].ToString());
                            eVOD.IMP_PRECIO_UNITARIO = decimal.Parse(dtDetalle.Rows[i]["IMP_PRECIO_UNITARIO"].ToString());
                            eVOD.CANT_UNID_OFERT = Convert.ToInt32(dtDetalle.Rows[i]["CANT_UNID_OFERT"]);
                            eVOD.IMP_PRECIO_UNITARIO_OFERTA = decimal.Parse(dtDetalle.Rows[i]["IMP_PRECIO_UNITARIO_OFERTA"].ToString());
                            resultado = oVOD.Insertar(eVOD);
                            if (resultado == false)
                            {
                                lblMensaje.Text = "Ocurrió un error al grabar los materiales.";
                                popupErrores.ShowOnPageLoad = true;
                                return;
                            }
                        }

                        //Registrar Detalle de los Usuarios
                        string correos = "";
                        clsT_VEN_OFERTA_USUARIOBL negOferta = new clsT_VEN_OFERTA_USUARIOBL();
                        negOferta.Eliminar(ID_VEN_OFERTA_CAB);
                        DataTable dtUsuarios = new DataTable();
                        dtUsuarios = (DataTable)Session["dtUsuarios"];
                        for (int x = 0; x < dtUsuarios.Rows.Count; x++)
                        {
                            T_VEN_OFERTA_USUARIO entidad = new T_VEN_OFERTA_USUARIO();
                            entidad.ID_VEN_OFERTA_USUARIO = negOferta.UltimoID() + 1;
                            entidad.ID_VEN_OFERTA_CAB = ID_VEN_OFERTA_CAB;
                            entidad.ID_USUARIO = dtUsuarios.Rows[x]["ID_USUARIO"].ToString();
                            negOferta.Insertar(entidad);
                            correos = correos + dtUsuarios.Rows[x]["DES_EMAIL"].ToString() + ",";
                        }

                        correos = correos.Substring(0, correos.Length - 1);

                        try
                        {

                            //Enviar Correo a todos los usuarios de la lista.
                            MailMessage mail = new MailMessage();

                            mail.From = new MailAddress(ConfigurationManager.AppSettings["MailFrom"], ConfigurationManager.AppSettings["UserNameSMTP"]);
                            mail.Subject = ("Nueva Oferta");
                            mail.Body = TextoEmail(ID_VEN_OFERTA_CAB);
                            mail.IsBodyHtml = true;
                            mail.To.Add(correos);

                            SmtpClient s = new SmtpClient();
                            s.Host = ConfigurationManager.AppSettings["EmailServer"];
                            s.Port = 25;
                            s.EnableSsl = false;
                            s.UseDefaultCredentials = false;
                            s.Credentials = new System.Net.NetworkCredential(ConfigurationManager.AppSettings["MailFrom"], ConfigurationManager.AppSettings["PasswordSMTP"]);
                            s.Send(mail);

                        }
                        catch (Exception ex)
                        {
                            lblMensaje.Text = ex.Message;
                            popupErrores.ShowOnPageLoad = true;
                        }

                    }
                    if (resultado == false)
                    {
                        lblMensaje.Text = "Ocurrió un error al grabar los materiales.";
                        popupErrores.ShowOnPageLoad = true;
                        return;
                    }
                }

                cboOrganizacion.Enabled = false;
                cboOficina.Enabled = false;
                deFechaInicial.Enabled = false;
                cboCanal.Enabled = false;
                cboTipoDescuento.Enabled = false;
                deFechaFinal.Enabled = false;
                btnRegistrar.Enabled = false;
                gvMateriales.Enabled = false;
                btnNuevo.Enabled = false;
                btnModificar.Enabled = false;
                btnEliminar.Enabled = false;
                btnImportarExcel.Enabled = false;
                btnDescargarExcel.Enabled = false;
                btnAgregarUsuario.Enabled = false;
                cboUsuario.Enabled = false;
                gvUsuarios.Enabled = false;

                lblMensaje.Text = "Oferta Registrada Satisfactoriamente";
                popupErrores.ShowOnPageLoad = true;
            }
            catch (Exception ex)
            {
                lblMensaje.Text = ex.Message;
                popupErrores.ShowOnPageLoad = true;
            }
        }

        protected void btnMBuscar_Click(object sender, EventArgs e)
        {
            MaterialBuscar();
        }

        protected void AgregarMaterial(object sender, EventArgs e)
        {
            try
            {
                int intIndex = grdMaterial.FocusedRowIndex;
                if (intIndex == -1)
                {
                    lblMensaje.Text = "Debe Seleccionar Un Material.";
                    popupErrores.ShowOnPageLoad = true;
                    return;
                }

                pcMaterial.ShowOnPageLoad = false;

                int? intIdMaterial = null;
                String strCodMaterial, strDesMaterial, strDES_MODELO, strDES_GRUPO_ARTICULO, strDES_SECTOR;

                intIdMaterial = Convert.ToInt32(grdMaterial.GetRowValues(intIndex, "ID_MATERIAL"));
                strCodMaterial = grdMaterial.GetRowValues(intIndex, "COD_MATERIAL").ToString();
                strDesMaterial = grdMaterial.GetRowValues(intIndex, "DES_MATERIAL").ToString();
                strDES_MODELO = grdMaterial.GetRowValues(intIndex, "DES_MODELO").ToString();
                strDES_GRUPO_ARTICULO = grdMaterial.GetRowValues(intIndex, "DES_GRUPO_ARTICULO").ToString();
                strDES_SECTOR = grdMaterial.GetRowValues(intIndex, "DES_SECTOR").ToString();

                lblIdMaterial.Text = intIdMaterial.ToString();
                lblCodigoMaterial.Text = strCodMaterial;
                txtCodMaterial.Text = strCodMaterial;
                lblDesMaterial.Text = strDesMaterial;
                lblModelo.Text = strDES_MODELO;
                lblGrupoArticulo.Text = strDES_GRUPO_ARTICULO;
                lblSector.Text = strDES_SECTOR;

            }
            catch (Exception)
            {

            }
        }

     

        protected void ucCargarExcel_FileUploadComplete(object sender, DevExpress.Web.ASPxUploadControl.FileUploadCompleteEventArgs e)
        {
            try
            {
                if (e.IsValid)
                {
                    String filePath = Server.MapPath("~/Archivos Excel/" + e.UploadedFile.FileName);
                    e.UploadedFile.SaveAs(filePath);
                    RutaExcel = filePath;
                }
            }
            catch (Exception ex)
            {
                lblMensaje.Text = ex.Message;
                popupErrores.ShowOnPageLoad = true;
            }
        }

        protected void cmdImportar_Click(object sender, EventArgs e)
        {
            try
            {
                pcImpExcel.ShowOnPageLoad = false;
                TipoCarga();
            }
            catch (Exception ex)
            {
                lblMensaje.Text = ex.Message;
                popupErrores.ShowOnPageLoad = true;
            }
        }

        private void TipoCarga()
        {
            if (RutaExcel.Length == 0)
            {
                pcImpExcel.ShowOnPageLoad = true;
                lblMensaje.Text = "Debe seleccionar un archivo a importar.";
                popupErrores.ShowOnPageLoad = true;
                return;
            }
            pcImpExcel.ShowOnPageLoad = false;
            cargar_Grid2(RutaExcel);
        }

        private void cargar_Grid2(String filePath)
        {
            try
            {
                String strSQL = "";
                pcImpExcel.ShowOnPageLoad = false;
                DataTable dtDetalle = new DataTable();
                dtDetalle = (DataTable)Session["dtDetalle"];
                dtDetalle.Clear();
                DataTable dtExcel = new DataTable();
                System.Data.OleDb.OleDbConnectionStringBuilder builder = new System.Data.OleDb.OleDbConnectionStringBuilder();
                builder.DataSource = filePath;

                if (Path.GetExtension(filePath).ToUpper() == ".XLS")
                {
                    builder.Provider = "Microsoft.ACE.OLEDB.12.0";
                    builder.Add("Extended Properties", "Excel 8.0;HRD=Yes;IMEX=1");
                }
                else if (Path.GetExtension(filePath).ToUpper() == ".XLSX")
                {
                    builder.Provider = "Microsoft.ACE.OLEDB.12.0";
                    builder.Add("Extended Properties", "Excel 12.0;HRD=Yes;IMEX=1");
                }

                System.Data.OleDb.OleDbConnection oledbConn = new System.Data.OleDb.OleDbConnection(builder.ConnectionString);
                strSQL = "SELECT CODIGO_MATERIAL, PRECIO_UNITARIO, UNIDADES_OFERTADAS,PRECIO_UNITARIO_OFERTA FROM [Hoja1$] WHERE CODIGO_MATERIAL IS NOT NULL";
                System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand(strSQL, oledbConn);
                System.Data.OleDb.OleDbDataAdapter da = new System.Data.OleDb.OleDbDataAdapter(cmd);
                da.Fill(dtExcel);

                oledbConn.Close();
                RutaExcel = String.Empty;

                foreach (DataRow dr2 in dtExcel.Rows)
                {
                    if (dr2["CODIGO_MATERIAL"].ToString().Length > 0)
                    {
                        clsT_VEN_OFERTA_CABBL bl = new clsT_VEN_OFERTA_CABBL();
                        TD_MATERIAL_OFERTA lista = new TD_MATERIAL_OFERTA();
                        lista = bl.ListarOferta(dr2["CODIGO_MATERIAL"].ToString());




                        //if (lista.ID_MATERIAL == 0)
                        //{
                        //    struct_T_Material_Por_Asignar materialNoAsignado = new struct_T_Material_Por_Asignar();
                        //    materialNoAsignado.CODIGO_MATERIAL = dr2["CODIGO_MATERIAL"].ToString();
                        //    listaMaterialNoAsginado.Add(materialNoAsignado);
                        //}
                        //else
                        //{

                            DataRow dr;
                            dr = dtDetalle.NewRow();
                            dr["ID_MATERIAL"] = lista.ID_MATERIAL;
                            dr["DES_MATERIAL"] = lista.DES_MATERIAL;
                            dr["IMP_PRECIO_UNITARIO"] =dr2["PRECIO_UNITARIO"].ToString()==""?0:decimal.Parse(dr2["PRECIO_UNITARIO"].ToString());
                            dr["DES_MODELO"] = lista.DES_MODELO;
                            dr["DES_GRUPO_ARTICULO"] = lista.DES_GRUPO_ARTICULO;
                            dr["COD_MATERIAL"] = dr2["CODIGO_MATERIAL"].ToString();
                            dr["DES_SECTOR"] = lista.DES_SECTOR;
                            dr["CANT_UNID_OFERT"] =dr2["UNIDADES_OFERTADAS"].ToString()==""?0: decimal.Parse(dr2["UNIDADES_OFERTADAS"].ToString());
                            dr["IMP_PRECIO_UNITARIO_OFERTA"] =dr2["PRECIO_UNITARIO_OFERTA"].ToString()==""?0: decimal.Parse(dr2["PRECIO_UNITARIO_OFERTA"].ToString());
                            dtDetalle.Rows.Add(dr);
                    }
                    
                }
                Session["dtDetalle"] = dtDetalle;
                gvMateriales.DataSource = dtDetalle;
                gvMateriales.DataBind();
            }
            catch (Exception ex)
            {
                lblMensaje.Text = ex.Message;
                popupErrores.ShowOnPageLoad = true;
            }
        }



        private struct struct_T_Material_Por_Asignar {

            public String CODIGO_MATERIAL { get; set; }
            public decimal PRECIO_UNITARIO { get;set; }
            public decimal UNIDADES_OFERTADAS { get; set; }
        
        }

        protected void GuardarCM(object sender, EventArgs e)
        {
            DataTable dtDetalle = new DataTable();
            dtDetalle = (DataTable)Session["dtDetalle"];
            bool repetido = false;

            if (decimal.Parse(seCantidadOfertada.Value.ToString()) <= 0)
            {
                lblMensaje.Text = "La cantidad ofertada tiene que ser mayor a cero.";
                popupErrores.ShowOnPageLoad = true;
                return;
            }

            //Validar que el precio unitario sea mayor a cero
            if (decimal.Parse(sePrecioUnitarioOferta.Value.ToString()) <= 0)
            {
                lblMensaje.Text = "El precio unitario tiene que ser mayor a cero.";
                popupErrores.ShowOnPageLoad = true;
                return;
            }


            if (txtTipo.Text == "N")
            {
                //Validar materiales repetidos
                for (int i = 0; i < dtDetalle.Rows.Count; i++)
                {
                    if (dtDetalle.Rows[i]["ID_MATERIAL"].ToString() == lblIdMaterial.Text)
                    {
                        repetido = true;
                    }
                }
                if (repetido == true)
                {
                    lblMensaje.Text = "Este material ya está agregado en la lista.";
                    popupErrores.ShowOnPageLoad = true;
                    return;
                }
            }

            try
            {
                if (txtTipo.Text == "N")
                {
                    DataRow dr;
                    dr = dtDetalle.NewRow();
                    dr["ID_MATERIAL"] = lblIdMaterial.Text;
                    dr["DES_MATERIAL"] = lblDesMaterial.Text.Trim().ToUpper();
                    dr["IMP_PRECIO_UNITARIO"] = decimal.Parse(sePrecioUnitario.Value.ToString());
                    dr["DES_MODELO"] = lblModelo.Text.ToUpper().Trim();
                    dr["DES_GRUPO_ARTICULO"] = lblGrupoArticulo.Text.Trim().ToUpper();
                    dr["COD_MATERIAL"] = lblCodigoMaterial.Text.Trim();
                    dr["DES_SECTOR"] = lblSector.Text;
                    dr["CANT_UNID_OFERT"] = int.Parse(seCantidadOfertada.Value.ToString());
                    dr["FEC_FIN"] = null;
                    dr["IMP_PRECIO_UNITARIO_OFERTA"] = decimal.Parse(sePrecioUnitarioOferta.Value.ToString());

                    dtDetalle.Rows.Add(dr);
                    Session["dtDetalle"] = dtDetalle;
                    gvMateriales.DataSource = dtDetalle;
                    gvMateriales.DataBind();
                }
                else 
                {
                    int fila = int.Parse(txtFila.Text);
                    dtDetalle.Rows[fila]["ID_MATERIAL"] = lblIdMaterial.Text;
                    dtDetalle.Rows[fila]["DES_MATERIAL"] = lblDesMaterial.Text.Trim().ToUpper();
                    dtDetalle.Rows[fila]["IMP_PRECIO_UNITARIO"] = decimal.Parse(sePrecioUnitario.Value.ToString());
                    dtDetalle.Rows[fila]["DES_MODELO"] = lblModelo.Text.ToUpper().Trim();
                    dtDetalle.Rows[fila]["DES_GRUPO_ARTICULO"] = lblGrupoArticulo.Text.Trim().ToUpper();
                    dtDetalle.Rows[fila]["COD_MATERIAL"] = lblCodigoMaterial.Text.Trim();
                    dtDetalle.Rows[fila]["DES_SECTOR"] = lblSector.Text;
                    dtDetalle.Rows[fila]["CANT_UNID_OFERT"] = int.Parse(seCantidadOfertada.Value.ToString());
                    dtDetalle.Rows[fila]["FEC_FIN"] = null;
                    dtDetalle.Rows[fila]["IMP_PRECIO_UNITARIO_OFERTA"] = decimal.Parse(sePrecioUnitarioOferta.Value.ToString());
                    Session["dtDetalle"] = dtDetalle;
                    gvMateriales.DataSource = dtDetalle;
                    gvMateriales.DataBind();
                    popupNuevo.ShowOnPageLoad = false;
                }

                sePrecioUnitarioOferta.Value = 0;
                sePrecioUnitario.Value = 0;
                seCantidadOfertada.Value = 0;
                txtCodMaterial.Text = "";
                lblDesMaterial.Text = "";
                lblModelo.Text = "";
                lblGrupoArticulo.Text = "";
                lblSector.Text = "";
                lblStock.Text = "";
                lblCodigoMaterial.Text = "";
                lblIdMaterial.Text = "";
                txtCodMaterial.Focus();
            }
            catch (Exception ex)
            {
                lblMensaje.Text = ex.Message;
                popupErrores.ShowOnPageLoad = true;
            }
        }

        void ListarMaterialesxCodigo() 
        {
            List<E_TD_MATERIAL> lista = new List<E_TD_MATERIAL>();
            clsMaterialBL neg = new clsMaterialBL();
            lista = neg.ListarMaterialxCodigo(txtCodMaterial.Text.Trim());
            if (lista != null)
            {
                if (lista.Count > 0)
                {
                    lblIdMaterial.Text = lista[0].ID_MATERIAL.ToString();
                    lblDesMaterial.Text = lista[0].DES_MATERIAL;
                    lblModelo.Text = lista[0].DES_MODELO;
                    lblGrupoArticulo.Text = lista[0].DES_GRUPO_ARTICULO;
                    lblCodigoMaterial.Text = lista[0].COD_MATERIAL;
                    lblSector.Text = lista[0].DES_SECTOR;
                    lblStock.Text = "0";
                    seCantidadOfertada.Focus();
                }
                else
                {
                    txtCodMaterial.Text = "";
                    lblIdMaterial.Text = "";
                    lblDesMaterial.Text = "";
                    lblModelo.Text = "";
                    lblGrupoArticulo.Text = "";
                    lblCodigoMaterial.Text = "";
                    lblSector.Text = "";
                    lblStock.Text = "";
                    seCantidadOfertada.Value = 0;
                    sePrecioUnitarioOferta.Value = 0;
                    sePrecioUnitario.Value = 0;
                    txtCodMaterial.Focus();
                }
            }
            else 
            {
                txtCodMaterial.Text = "";
                lblIdMaterial.Text = "";
                lblDesMaterial.Text = "";
                lblModelo.Text = "";
                lblGrupoArticulo.Text = "";
                lblCodigoMaterial.Text = "";
                lblSector.Text = "";
                lblStock.Text = "";
                seCantidadOfertada.Value = 0;
                sePrecioUnitarioOferta.Value = 0;
                sePrecioUnitario.Value = 0;
                txtCodMaterial.Focus();
            }
        }

        protected void txtCodMaterial_TextChanged(object sender, EventArgs e)
        {
            ListarMaterialesxCodigo();
        }

        protected void btnModificar_Click(object sender, EventArgs e)
        {
            DataTable dtDetalle = new DataTable();
            dtDetalle = (DataTable)Session["dtDetalle"];

            int indice = gvMateriales.FocusedRowIndex;
            if (indice >= 0)
            {
                txtFila.Text = indice.ToString();
                lblIdMaterial.Text = dtDetalle.Rows[indice]["ID_MATERIAL"].ToString();
                lblDesMaterial.Text = dtDetalle.Rows[indice]["DES_MATERIAL"].ToString();
                sePrecioUnitarioOferta.Value = dtDetalle.Rows[indice]["IMP_PRECIO_UNITARIO_OFERTA"].ToString();
                sePrecioUnitario.Value = dtDetalle.Rows[indice]["IMP_PRECIO_UNITARIO"].ToString();
                lblModelo.Text = dtDetalle.Rows[indice]["DES_MODELO"].ToString();
                lblGrupoArticulo.Text = dtDetalle.Rows[indice]["DES_GRUPO_ARTICULO"].ToString();
                lblCodigoMaterial.Text = dtDetalle.Rows[indice]["COD_MATERIAL"].ToString();
                txtCodMaterial.Text = dtDetalle.Rows[indice]["COD_MATERIAL"].ToString();
                lblSector.Text = dtDetalle.Rows[indice]["DES_SECTOR"].ToString();
                seCantidadOfertada.Value = dtDetalle.Rows[indice]["CANT_UNID_OFERT"].ToString();
                txtTipo.Text = "M";
                popupNuevo.ShowOnPageLoad = true;
                seCantidadOfertada.Focus();
            }
        }

        protected void btnEliminar_Click(object sender, EventArgs e)
        {
            DataTable dtDetalle = new DataTable();
            dtDetalle = (DataTable)Session["dtDetalle"];

            int indice = gvMateriales.FocusedRowIndex;
            if (indice >= 0)
            {
                dtDetalle.Rows.RemoveAt(indice);
            }
            Session["dtDetalle"] = dtDetalle;
            gvMateriales.DataSource = dtDetalle;
            gvMateriales.DataBind();
        }

        protected void btnAgregarUsuario_Click(object sender, EventArgs e)
        {
            DataTable dtUsuarios = new DataTable();
            dtUsuarios = (DataTable)Session["dtUsuarios"];

            bool EsRepetido = false;
            string id_usuario = cboUsuario.Value.ToString();
            for (int i = 0; i < dtUsuarios.Rows.Count; i++)
            {
                if (id_usuario.Trim() == dtUsuarios.Rows[i]["ID_USUARIO"].ToString().Trim()) 
                {
                    EsRepetido = true;
                }
            }

            if (EsRepetido == false)
            {
                string texto = cboUsuario.Text;
                string[] valores = texto.Split(char.Parse(";"));
                DataRow dr;
                dr = dtUsuarios.NewRow();
                dr["ID_USUARIO"] = cboUsuario.Value.ToString();
                dr["DES_EMAIL"] = valores.GetValue(1);
                dr["DES_APELLIDOS"] = valores.GetValue(0);
                dr["LOCK"] = "0";
                dtUsuarios.Rows.Add(dr);
                gvUsuarios.DataSource = dtUsuarios;
                gvUsuarios.DataBind();
                ListarUsuarios();
            }
            else 
            {
                //Item Repetido
                lblMensaje.Text = "Este usuario ya se encuentra en la lista.";
                popupErrores.ShowOnPageLoad = true;
                ListarUsuarios();
            }
        }

        protected void gvUsuarios_RowDeleting(object sender, DevExpress.Web.Data.ASPxDataDeletingEventArgs e)
        {
            try
            {
                DataTable dtUsuarios = new DataTable();
                dtUsuarios = (DataTable)Session["dtUsuarios"];
                int fila = gvUsuarios.FindVisibleIndexByKeyValue(e.Keys[gvUsuarios.KeyFieldName]);

                //Validar si la fila está bloqueada
                if (dtUsuarios.Rows[fila]["LOCK"].ToString() == "0")
                {
                    dtUsuarios.Rows.RemoveAt(fila);
                    Session["dtUsuarios"] = dtUsuarios;
                }
                gvUsuarios.DataSource = dtUsuarios;
                gvUsuarios.DataBind();
                ListarUsuarios();
                e.Cancel = true;
            }
            catch (Exception)
            {

            }
        }

        string TextoEmail(int id) 
        {
            clsT_VEN_OFERTA_CABBL oVOC = new clsT_VEN_OFERTA_CABBL();
            T_VEN_OFERTA_EMAIL eVOC = new T_VEN_OFERTA_EMAIL();
            eVOC = oVOC.SeleccionarEmail(id);

            string body = "";
            body = body + "<table style='font-family:Arial; font-size:12px;'>";

            body = body + "<tr>";
            body = body + "<td style='font-weight:bold'>Organización:</td>";
            body = body + "<td>" + eVOC.DES_ORG_VTA.ToUpper() + "</td>";
            body = body + "</tr>";

            body = body + "<tr>";
            body = body + "<td style='font-weight:bold'>Oficina de Venta:</td>";
            body = body + "<td>" + eVOC.DES_OFI_VTA.ToUpper() + "</td>";
            body = body + "</tr>";

            body = body + "<tr>";
            body = body + "<td style='font-weight:bold'>Canal de Distribución:</td>";
            body = body + "<td>" + eVOC.DES_CANAL_DISTRIB.ToUpper() + "</td>";
            body = body + "</tr>";

            body = body + "<tr>";
            body = body + "<td style='font-weight:bold'>Tipo de Oferta:</td>";
            body = body + "<td>" + eVOC.DesOferta.ToUpper() + "</td>";
            body = body + "</tr>";

            body = body + "<tr>";
            body = body + "<td style='font-weight:bold'>Estado:</td>";
            body = body + "<td>" + eVOC.DesEstado.ToUpper() + "</td>";
            body = body + "</tr>";

            body = body + "<tr>";
            body = body + "<td style='font-weight:bold'>Fecha Inicio:</td>";
            body = body + "<td>" + eVOC.FEC_INICIO.ToShortDateString() + "</td>";
            body = body + "</tr>";

            body = body + "<tr>";
            body = body + "<td style='font-weight:bold'>Fecha Final:</td>";
            body = body + "<td>" + eVOC.FEC_FIN.ToShortDateString() + "</td>";
            body = body + "</tr>";

            body = body + "<tr>";
            body = body + "<td style='font-weight:bold'>Usuario Registro:</td>";
            body = body + "<td>" + eVOC.UsuarioRegistro.ToUpper() + "</td>";
            body = body + "</tr>";

            body = body + "<tr>";
            body = body + "<td style='font-weight:bold'>Fecha Registro:</td>";
            body = body + "<td>" + eVOC.FEC_REGISTRO.ToShortDateString() + "</td>";
            body = body + "</tr>";

            body = body + "</table>";

            body = body + "<br />";
            body = body + "<br />";

            //Cargar detalle de ofertas
            clsT_VEN_OFERTA_DETBL oVOD = new clsT_VEN_OFERTA_DETBL();
            List<T_VEN_OFERTA_DET_LISTAR> lista = new List<T_VEN_OFERTA_DET_LISTAR>();
            lista = oVOD.Seleccionar(id);

            body = body + "<table style='font-family:Arial; font-size:12px;' border='1' cellpadding='4'>";
            body = body + "<tr>";
            body = body + "<td style='font-weight:bold' bgcolor='#DFF9FF'>Código</td>";
            body = body + "<td style='font-weight:bold' bgcolor='#DFF9FF'>Material</td>";
            body = body + "<td style='font-weight:bold' bgcolor='#DFF9FF'>Sector</td>";
            body = body + "<td style='font-weight:bold' bgcolor='#DFF9FF'>Grupo</td>";
            body = body + "<td style='font-weight:bold' bgcolor='#DFF9FF'>Modelo</td>";
            body = body + "<td style='font-weight:bold' bgcolor='#DFF9FF'>Precio Unitario Oferta</td>";
            body = body + "<td style='font-weight:bold' bgcolor='#DFF9FF'>Precio Unitario</td>";
            body = body + "<td style='font-weight:bold' bgcolor='#DFF9FF'>Cantidad Ofertada</td>";
            body = body + "<td style='font-weight:bold' bgcolor='#DFF9FF'>Fecha Final Oferta</td>";
            body = body + "</tr>";
            for (int i = 0; i < lista.Count; i++)
            {
                body = body + "<tr>";
                body = body + "<td style='font-weight:bold'>" + lista[i].COD_MATERIAL.ToUpper() + "</td>";
                body = body + "<td>" + lista[i].DES_MATERIAL.ToUpper() + "</td>";
                body = body + "<td>" + lista[i].DES_SECTOR.ToUpper() + "</td>";
                body = body + "<td>" + lista[i].DES_GRUPO_ARTICULO.ToUpper() + "</td>";
                body = body + "<td>" + lista[i].DES_MODELO.ToUpper() + "</td>";
                body = body + "<td>" + lista[i].IMP_PRECIO_UNITARIO_OFERTA.ToString() + "</td>";
                body = body + "<td>" + lista[i].IMP_PRECIO_UNITARIO.ToString() + "</td>";
                body = body + "<td>" + lista[i].CANT_UNID_OFERT.ToString() + "</td>";
                body = body + "<td>" + lista[i].FEC_FIN + "</td>";
                body = body + "</tr>";
            }

            body = body + "</table>";

            return body;
        }

        protected void btnDetalle_Click(object sender, EventArgs e)
        {
            try
            {
                string filepath = Server.MapPath("\\Archivos Excel\\Formato\\Ofertas.xlsx");
                string filename = "Ofertas.xlsx";
                Response.Clear();
                Response.ContentType = "application/vnd.ms-excel";
                Response.AddHeader("Content-Disposition", "attachment; filename=" + filename);
                Response.Flush();
                Response.WriteFile(filepath);
                Response.End();
            }
            catch (Exception ex)
            {
                lblMensaje.Text = ex.Message;
                popupErrores.ShowOnPageLoad = true;
            }
        }
    }
}